"""
@version:python3
@author:大橘为重
@file:08-QToolButton.py
@time:2022/2/23 20:39
"""
# 0、导入需要的包和模块
from PyQt5.Qt import *
import sys


# 1、创建一个应用程序对象
app = QApplication(sys.argv)

# 2、控件操作
# 创建控件、设置控件、事件和信号的处理
# 2.1 创建控件
window = QWidget()
# 2.2 设置控件
window.setWindowTitle("QToolButton的使用")
window.resize(500,500)

tb = QToolButton(window)
# tb = QPushButton(window)
tb.setText("工具") # 注意工具按钮中默认文本与图标不能共存，如需共存需要修改按钮样式
tb.setIcon(QIcon("xxx.png"))
# tb.setIconSize(QSize(60,60))
# tb.setToolTip("这是一个工具按钮")
# 按钮样式设置
# Qt.ToolButtonIconOnly 仅显示图标
# Qt.ToolButtonTextOnly 仅显示文字
# Qt.ToolButtonTextBesideIcon 文本显示在图标旁边
# Qt.ToolButtonTextUnderIcon 文本显示在图标下方
# Qt.ToolButtonFollowStyle 遵循风格
tb.setToolButtonStyle(Qt.ToolButtonTextBesideIcon)
tb.setAutoRaise(True)
# 创建箭头按钮
# Qt.UpArrow 向上箭头
# Qt.DownArrow 向下箭头
# Qt.LeftArrow 向左箭头
# Qt.RightArrow 向右箭头
# Qt.NoArrow 无箭头
tb.setArrowType(Qt.RightArrow) # 默认箭头图标会覆盖文本和图标，通过按钮样式打开文本和图标显示时，箭头优先级高于图标


menu = QMenu(tb)
menu.setTitle("菜单") # 这里实际上无法显示
sub_menu = QMenu(menu)
sub_menu.setTitle("子菜单")
sub_menu.setIcon(QIcon("xxx.png"))


action1 = QAction(QIcon("xxx.png"),"行为1",menu)
action1.setData([1,2,3])

action2 = QAction(QIcon("xxx.png"),"行为2",menu)
action2.setData({"name":"sz"})
# action.triggered.connect(lambda :print("点击了行为选项"))

menu.addMenu(sub_menu)
menu.addSeparator()
menu.addAction(action1)
menu.addAction(action2)
tb.setMenu(menu) # 默认长按才能弹出菜单
tb.pressed.connect(lambda :print("工具按钮被点击了"))
tb.setPopupMode(QToolButton.MenuButtonPopup)
# QToolButton.DelayedPopup 鼠标按住一会才显示 类似于浏览器后退按钮
# QToolButton.MenuButtonPopup 有一个专门的指示箭头 点击箭头才显示
# QToolButton.InstantPopup 点了按钮就显示 点击信号不会发射

def do_action(action):
    print("点击了行为",action.data())
tb.triggered.connect(do_action)

# btn = QPushButton(window)
# btn.setText("一般按钮")
# btn.move(100,100)
# btn.setFlat(True)
#
# menu = QMenu(btn)
# menu.setTitle("菜单") # 这里实际上无法显示
# sub_menu = QMenu(menu)
# sub_menu.setTitle("子菜单")
# sub_menu.setIcon(QIcon("xxx.png"))
#
#
# action = QAction(QIcon("xxx.png"),"行为",menu)
# action.triggered.connect(lambda :print("点击了行为选项"))
#
# menu.addMenu(sub_menu)
# menu.addSeparator()
# menu.addAction(action)
# btn.setMenu(menu)

# 2.3 展示控件
window.show()

# 3、应用程序的执行，进入到消息循环
sys.exit(app.exec_())